package logica;
import java.io.*;
import java.util.*;
/**
**********************************************************************************************<br/>
 * Crea un vector de arreglos de enteros
 * Permite gruadar matrices de incidencia
 * Crea y lee archivos
 * Imprime matrices y las convierte a String
* @author Jefferson Amado Pe&ntilde;a Torres
**********************************************************************************************
* @version 1.00 2010/11/10
*/
public class ManejadorDeArchivo {
	private File archivo;
	private FileInputStream fis = null;
	private BufferedInputStream bis = null;
	private DataInputStream dis = null;
	private Vector<int[]> lineas;
	private String lectura="";
	/**
	*Objeto de la clase que recibira la lectura y creara el grafo para ser procesado
	*/
	public EnrutamientoMulticast objEnrrutamientoMulticast;
	/**
	*Contruye un nuevo lector de archivos sin archivo
	*/
	public ManejadorDeArchivo(){
		lineas =new  Vector<int[]>(); 
		objEnrrutamientoMulticast=new EnrutamientoMulticast();
	}
	/**
	*Contruye un nuevo lector de archivos
	*@param archivo archivo leido
	*/
	public ManejadorDeArchivo(File archivo) {
		this.archivo=archivo;
		objEnrrutamientoMulticast= new EnrutamientoMulticast();
		lineas =new  Vector<int[]>();  	
//		System.out.println("Cargo el archivo:"+archivo.getName());
	}
	/**
	*Establece el archivo 
	*@param archivo archivo leido
	*/
	public void setArchivo(File archivo) {
		this.archivo=archivo;   	
	}
	/**
	*Retorna el Archivo que se leyo
	@return Archivo Leido
	*/
	public File getArchivo(){
		return this.archivo;
	}	
	/**
	*Guarda un archivo en una direccion
	*@param salidaUrl direccion donde guarda el archivo
	*@param contenido contenido del archivo a guardar
	*@throws IOException problemas a leer
	*/
	public static void saveArchivo(String salidaUrl,String salida){
		try{
			FileWriter fstream = new FileWriter(salidaUrl);
			BufferedWriter out = new BufferedWriter(fstream);
			out.write(salida);
			out.close();
		}catch (IOException e){
			System.err.println("Error Write Output: " + e.getMessage());
		}
	}
	/**
	*Corazon de clase aqui el LectorDeArchivos crea el grafo 
	*@throws IOException problemas a leer
	*/
	public void crearMatrizDesdeArchivo(){
		//System.out.println("En crearMatrizDesdeArchivo()");
		try {
			lectura+="Archivo : "+archivo.getName()+"\n";
			fis = new FileInputStream(archivo);
			bis = new BufferedInputStream(fis);
			dis = new DataInputStream(bis);
			while (dis.available() != 0) {
				String strDatos=dis.readLine();
				lectura+=strDatos+"\n";
				StringTokenizer tokens=new StringTokenizer(strDatos, " ");
				int nDatos=tokens.countTokens();
				int[] datos=new int[nDatos];
				int i=0;
				while(tokens.hasMoreTokens()){
					String str=tokens.nextToken();
					datos[i]=Integer.valueOf(str).intValue();
					i++;
				}
			lineas.add(datos);
		}
		objEnrrutamientoMulticast.setMatriz(lineas);
		//objEnrrutamientoMulticast.computeEnrutamientoMulticast();
		fis.close();
		bis.close();
		dis.close();
		}catch(IOException ioe){
			System.err.println("Error Read Input: " + ioe.getMessage());
		}
	}
         /**
         * Convierte una matriz a una cadena
         * @param entrada matriz que usted desea imprimir en la consola
         */
        public static String toString(int [][] entrada){
            String salida="";
           for(int i =0;i<entrada.length;i++){
                for(int j=0;j<entrada[i].length;j++){
                    salida+=entrada[i][j]+" ";
                }
                salida+="\n";
           }
            return salida;
        }
        /**
         * Pinta una matriz
         * @param entrada matriz que usted desea imprimir en la consola
         */
        public static void printMatrix(int [][] entrada){
           for(int i =0;i<entrada.length;i++){
                for(int j=0;j<entrada[i].length;j++){
                    System.out.print(entrada[i][j]+" ");
                }
                System.out.print("\n");
            }
        }
        /**
         *Retorna la matriz como una cadena
         * @return archivo leido
         */
    public String toString(){
		return lectura+"\n ##################";
    }
}
